diff --git a/README.rst b/README.rst
index 0613a15..0bf30fd 100644
--- a/README.rst
+++ b/README.rst
@@ -52,6 +52,7 @@ To parse a STIX JSON string into a Python STIX object, use ``parse()``:
         "indicator_types": [
             "malicious-activity"
         ],
+        "pattern_type": "stix",
         "pattern": "[file:hashes.md5 ='d41d8cd98f00b204e9800998ecf8427e']",
         "valid_from": "2017-09-26T23:33:39.829952Z"
     }""")
diff --git a/stix2/patterns.py b/stix2/patterns.py
index 9656ff1..2e149be 100644
--- a/stix2/patterns.py
+++ b/stix2/patterns.py
@@ -135,6 +135,7 @@ _HASH_REGEX = {
     "SHA3512": ("^[a-fA-F0-9]{128}$", "SHA3-512"),
     "SSDEEP": ("^[a-zA-Z0-9/+:.]{1,128}$", "ssdeep"),
     "WHIRLPOOL": ("^[a-fA-F0-9]{128}$", "WHIRLPOOL"),
+    "TLSH": ("^[a-fA-F0-9]{70}$", "TLSH"),
 }
 
 
diff --git a/stix2/properties.py b/stix2/properties.py
index c956a08..f6211c8 100644
--- a/stix2/properties.py
+++ b/stix2/properties.py
@@ -363,6 +363,10 @@ class DictionaryProperty(Property):
                     "underscore (_)"
                 )
                 raise DictionaryKeyError(k, msg)
+
+        if len(dictified) < 1:
+            raise ValueError("must not be empty.")
+
         return dictified
 
 
@@ -381,6 +385,7 @@ HASHES_REGEX = {
     "SHA3512": (r"^[a-fA-F0-9]{128}$", "SHA3-512"),
     "SSDEEP": (r"^[a-zA-Z0-9/+:.]{1,128}$", "ssdeep"),
     "WHIRLPOOL": (r"^[a-fA-F0-9]{128}$", "WHIRLPOOL"),
+    "TLSH": (r"^[a-fA-F0-9]{70}$", "TLSH"),
 }
 
 
diff --git a/stix2/v21/observables.py b/stix2/v21/observables.py
index 0d27bb4..fdb61f4 100644
--- a/stix2/v21/observables.py
+++ b/stix2/v21/observables.py
@@ -592,6 +592,18 @@ class SocketExt(_Extension):
         ('socket_handle', IntegerProperty()),
     ])
 
+    def _check_object_constraints(self):
+        super(SocketExt, self)._check_object_constraints()
+
+        options = self.get('options')
+
+        if options is not None:
+            for key, val in options.items():
+                if key[:3] != "SO_":
+                    raise ValueError("Incorrect options key")
+                if not isinstance(val, int):
+                    raise ValueError("Options value must be an integer")
+
 
 class TCPExt(_Extension):
     # TODO: Add link
@@ -986,6 +998,18 @@ class X509Certificate(_Observable):
     ])
     _id_contributing_properties = ["hashes", "serial_number"]
 
+    def _check_object_constraints(self):
+        super(X509Certificate, self)._check_object_constraints()
+
+        att_list = [
+                'is_self_signed', 'hashes', 'version', 'serial_number',
+                'signature_algorithm', 'issuer', 'validity_not_before',
+                'validity_not_after', 'subject', 'subject_public_key_algorithm',
+                'subject_public_key_modulus', 'subject_public_key_exponent',
+                'x509_v3_extensions',
+        ]
+        self._check_at_least_one_property(att_list)
+
 
 def CustomObservable(type='x-custom-observable', properties=None):
     """Custom STIX Cyber Observable Object type decorator.
diff --git a/stix2/v21/sdo.py b/stix2/v21/sdo.py
index 7cd7891..6f7b52d 100644
--- a/stix2/v21/sdo.py
+++ b/stix2/v21/sdo.py
@@ -215,6 +215,13 @@ class Indicator(STIXDomainObject):
         ('granular_markings', ListProperty(GranularMarking)),
     ])
 
+    def __init__(self, *args, **kwargs):
+
+        if kwargs.get('pattern') and kwargs.get('pattern_type') == 'stix' and not kwargs.get('pattern_version'):
+            kwargs['pattern_version'] = '2.1'
+
+        super(STIXDomainObject, self).__init__(*args, **kwargs)
+
     def _check_object_constraints(self):
         super(Indicator, self)._check_object_constraints()
 

diff --git a/stix2/test/v21/test_bundle.py b/stix2/test/v21/test_bundle.py
index 54ef318..4e30c84 100644
--- a/stix2/test/v21/test_bundle.py
+++ b/stix2/test/v21/test_bundle.py
@@ -22,6 +22,7 @@ EXPECTED_BUNDLE = """{
             ],
             "pattern": "[file:hashes.MD5 = 'd41d8cd98f00b204e9800998ecf8427e']",
             "pattern_type": "stix",
+            "pattern_version": "2.1",
             "valid_from": "2017-01-01T12:34:56Z"
         },
         {
@@ -61,6 +62,7 @@ EXPECTED_BUNDLE_DICT = {
             "modified": "2017-01-01T12:34:56.000Z",
             "pattern": "[file:hashes.MD5 = 'd41d8cd98f00b204e9800998ecf8427e']",
             "pattern_type": "stix",
+            "pattern_version": "2.1",
             "valid_from": "2017-01-01T12:34:56Z",
             "indicator_types": [
                 "malicious-activity",
diff --git a/stix2/test/v21/test_indicator.py b/stix2/test/v21/test_indicator.py
index ea46d6d..0562dfd 100644
--- a/stix2/test/v21/test_indicator.py
+++ b/stix2/test/v21/test_indicator.py
@@ -19,6 +19,7 @@ EXPECTED_INDICATOR = """{
     ],
     "pattern": "[file:hashes.MD5 = 'd41d8cd98f00b204e9800998ecf8427e']",
     "pattern_type": "stix",
+    "pattern_version": "2.1",
     "valid_from": "1970-01-01T00:00:01Z"
 }"""
 
@@ -31,6 +32,7 @@ EXPECTED_INDICATOR_REPR = "Indicator(" + " ".join("""
     indicator_types=['malicious-activity'],
     pattern="[file:hashes.MD5 = 'd41d8cd98f00b204e9800998ecf8427e']",
     pattern_type='stix',
+    pattern_version='2.1',
     valid_from='1970-01-01T00:00:01Z'
 """.split()) + ")"
 
diff --git a/stix2/test/v21/test_observed_data.py b/stix2/test/v21/test_observed_data.py
index 0074bf7..2910ba1 100644
--- a/stix2/test/v21/test_observed_data.py
+++ b/stix2/test/v21/test_observed_data.py
@@ -1117,6 +1117,28 @@ def test_network_traffic_socket_example():
     assert nt.extensions['socket-ext'].socket_type == "SOCK_STREAM"
 
 
+def test_incorrect_socket_options():
+    with pytest.raises(ValueError) as excinfo:
+        stix2.v21.SocketExt(
+            is_listening=True,
+            address_family="AF_INET",
+            protocol_family="PF_INET",
+            socket_type="SOCK_STREAM",
+            options={"RCVTIMEO": 100},
+        )
+    assert "Incorrect options key" == str(excinfo.value)
+
+    with pytest.raises(ValueError) as excinfo:
+        stix2.v21.SocketExt(
+            is_listening=True,
+            address_family="AF_INET",
+            protocol_family="PF_INET",
+            socket_type="SOCK_STREAM",
+            options={"SO_RCVTIMEO": '100'},
+        )
+    assert "Options value must be an integer" == str(excinfo.value)
+
+
 def test_network_traffic_tcp_example():
     h = stix2.v21.TCPExt(src_flags_hex="00000002")
     nt = stix2.v21.NetworkTraffic(
@@ -1366,6 +1388,18 @@ def test_x509_certificate_example():
     assert x509.subject == "C=US, ST=Maryland, L=Pasadena, O=Brent Baccala, OU=FreeSoft, CN=www.freesoft.org/emailAddress=baccala@freesoft.org"  # noqa
 
 
+def test_x509_certificate_error():
+
+    with pytest.raises(stix2.exceptions.PropertyPresenceError) as excinfo:
+        stix2.v21.X509Certificate(
+            defanged=True,
+        )
+
+    assert excinfo.value.cls == stix2.v21.X509Certificate
+    assert "At least one of the" in str(excinfo.value)
+    assert "properties for X509Certificate must be populated." in str(excinfo.value)
+
+
 def test_new_version_with_related_objects():
     data = stix2.v21.ObservedData(
         first_observed="2016-03-12T12:00:00Z",
diff --git a/stix2/test/v21/test_properties.py b/stix2/test/v21/test_properties.py
index 1fb3cc4..50bce17 100644
--- a/stix2/test/v21/test_properties.py
+++ b/stix2/test/v21/test_properties.py
@@ -72,6 +72,14 @@ def test_list_property():
         p.clean([])
 
 
+def test_dictionary_property():
+    p = DictionaryProperty(StringProperty)
+
+    assert p.clean({'spec_version': '2.1'})
+    with pytest.raises(ValueError):
+        p.clean({})
+
+
 def test_string_property():
     prop = StringProperty()
 
@@ -411,6 +419,7 @@ def test_property_list_of_dictionary():
     "value", [
         {"sha256": "6db12788c37247f2316052e142f42f4b259d6561751e5f401a1ae2a6df9c674b"},
         [('MD5', '2dfb1bcc980200c6706feee399d41b3f'), ('RIPEMD-160', 'b3a8cd8a27c90af79b3c81754f267780f443dfef')],
+        [('TLSH', '6FF02BEF718027B0160B4391212923ED7F1A463D563B1549B86CF62973B197AD2731F8')],
     ],
 )
 def test_hashes_property_valid(value):
@@ -422,6 +431,7 @@ def test_hashes_property_valid(value):
     "value", [
         {"MD5": "a"},
         {"SHA-256": "2dfb1bcc980200c6706feee399d41b3f"},
+        {"TLSH": "6FF02BEF718027B0160B4391212923ED7F1A463D563B1549B86CF62973B197AD2731F"},
     ],
 )
 def test_hashes_property_invalid(value):

Update to STIX 2.1WD06
Necessary changes I see:
* [ ] `indicator.pattern_version`: if stix patterning lang used, default is spec_version of the object
* [ ] Empty dictionaries are now prohibited just like empty lists
* [ ] `socket-ext.options` now has some requirements around its keys/values
* [ ] Add a test to make sure we throw an error when trying to create an x509-certificate with only common properties and no x509-specific properties.
* [ ] Add TLSH to `properties.HASHES_REGEX`
stix2/test/v21/test_bundle.py::test_create_bundle1 stix2/test/v21/test_bundle.py::test_create_bundle2 stix2/test/v21/test_bundle.py::test_create_bundle_with_positional_args stix2/test/v21/test_bundle.py::test_create_bundle_with_positional_listarg stix2/test/v21/test_bundle.py::test_create_bundle_with_listarg_and_positional_arg stix2/test/v21/test_bundle.py::test_create_bundle_with_listarg_and_kwarg stix2/test/v21/test_bundle.py::test_create_bundle_with_arg_listarg_and_kwarg stix2/test/v21/test_indicator.py::test_indicator_with_all_required_properties stix2/test/v21/test_observed_data.py::test_incorrect_socket_options stix2/test/v21/test_observed_data.py::test_x509_certificate_error stix2/test/v21/test_properties.py::test_dictionary_property stix2/test/v21/test_properties.py::test_hashes_property_invalid[value2]
stix2/test/v21/test_bundle.py::test_empty_bundle stix2/test/v21/test_bundle.py::test_bundle_with_wrong_type stix2/test/v21/test_bundle.py::test_bundle_id_must_start_with_bundle stix2/test/v21/test_bundle.py::test_create_bundle_invalid stix2/test/v21/test_bundle.py::test_parse_bundle[2.1] stix2/test/v21/test_bundle.py::test_parse_unknown_type stix2/test/v21/test_bundle.py::test_stix_object_property stix2/test/v21/test_bundle.py::test_bundle_obj_id_found stix2/test/v21/test_bundle.py::test_bundle_objs_ids_found[bundle_data0] stix2/test/v21/test_bundle.py::test_bundle_getitem_overload_property_found stix2/test/v21/test_bundle.py::test_bundle_getitem_overload_obj_id_found stix2/test/v21/test_bundle.py::test_bundle_obj_id_not_found stix2/test/v21/test_bundle.py::test_bundle_getitem_overload_obj_id_not_found stix2/test/v21/test_indicator.py::test_indicator_autogenerated_properties stix2/test/v21/test_indicator.py::test_indicator_type_must_be_indicator stix2/test/v21/test_indicator.py::test_indicator_id_must_start_with_indicator stix2/test/v21/test_indicator.py::test_indicator_required_properties stix2/test/v21/test_indicator.py::test_indicator_required_property_pattern stix2/test/v21/test_indicator.py::test_indicator_created_ref_invalid_format stix2/test/v21/test_indicator.py::test_indicator_revoked_invalid stix2/test/v21/test_indicator.py::test_cannot_assign_to_indicator_attributes stix2/test/v21/test_indicator.py::test_invalid_kwarg_to_indicator stix2/test/v21/test_indicator.py::test_created_modified_time_are_identical_by_default stix2/test/v21/test_indicator.py::test_parse_indicator[{\n stix2/test/v21/test_indicator.py::test_parse_indicator[data1] stix2/test/v21/test_indicator.py::test_invalid_indicator_pattern stix2/test/v21/test_observed_data.py::test_observed_data_example stix2/test/v21/test_observed_data.py::test_observed_data_example_with_refs stix2/test/v21/test_observed_data.py::test_observed_data_example_with_object_refs stix2/test/v21/test_observed_data.py::test_observed_data_object_constraint stix2/test/v21/test_observed_data.py::test_observed_data_example_with_bad_refs stix2/test/v21/test_observed_data.py::test_observed_data_example_with_non_dictionary stix2/test/v21/test_observed_data.py::test_observed_data_example_with_empty_dictionary stix2/test/v21/test_observed_data.py::test_parse_observed_data[{\n stix2/test/v21/test_observed_data.py::test_parse_observed_data[data1] stix2/test/v21/test_observed_data.py::test_parse_artifact_valid["0": stix2/test/v21/test_observed_data.py::test_parse_artifact_invalid["0": stix2/test/v21/test_observed_data.py::test_artifact_example_dependency_error stix2/test/v21/test_observed_data.py::test_parse_autonomous_system_valid["0": stix2/test/v21/test_observed_data.py::test_parse_email_address[{\n stix2/test/v21/test_observed_data.py::test_parse_email_message[\n stix2/test/v21/test_observed_data.py::test_parse_email_message_not_multipart[\n stix2/test/v21/test_observed_data.py::test_parse_file_archive["0": stix2/test/v21/test_observed_data.py::test_parse_email_message_with_at_least_one_error[\n stix2/test/v21/test_observed_data.py::test_parse_basic_tcp_traffic[\n stix2/test/v21/test_observed_data.py::test_parse_basic_tcp_traffic_with_error[\n stix2/test/v21/test_observed_data.py::test_observed_data_with_process_example stix2/test/v21/test_observed_data.py::test_artifact_example stix2/test/v21/test_observed_data.py::test_artifact_mutual_exclusion_error stix2/test/v21/test_observed_data.py::test_directory_example stix2/test/v21/test_observed_data.py::test_directory_example_ref_error stix2/test/v21/test_observed_data.py::test_domain_name_example stix2/test/v21/test_observed_data.py::test_domain_name_example_invalid_ref_type stix2/test/v21/test_observed_data.py::test_file_example stix2/test/v21/test_observed_data.py::test_file_example_with_NTFSExt stix2/test/v21/test_observed_data.py::test_file_example_with_empty_NTFSExt stix2/test/v21/test_observed_data.py::test_file_example_with_PDFExt stix2/test/v21/test_observed_data.py::test_file_example_with_PDFExt_Object stix2/test/v21/test_observed_data.py::test_file_example_with_RasterImageExt_Object stix2/test/v21/test_observed_data.py::test_raster_image_ext_parse stix2/test/v21/test_observed_data.py::test_raster_images_ext_create stix2/test/v21/test_observed_data.py::test_file_example_with_WindowsPEBinaryExt stix2/test/v21/test_observed_data.py::test_file_example_encryption_error stix2/test/v21/test_observed_data.py::test_ipv4_address_example stix2/test/v21/test_observed_data.py::test_ipv4_address_valid_refs stix2/test/v21/test_observed_data.py::test_ipv4_address_example_cidr stix2/test/v21/test_observed_data.py::test_ipv6_address_example stix2/test/v21/test_observed_data.py::test_mac_address_example stix2/test/v21/test_observed_data.py::test_network_traffic_example stix2/test/v21/test_observed_data.py::test_network_traffic_http_request_example stix2/test/v21/test_observed_data.py::test_network_traffic_icmp_example stix2/test/v21/test_observed_data.py::test_network_traffic_socket_example stix2/test/v21/test_observed_data.py::test_network_traffic_tcp_example stix2/test/v21/test_observed_data.py::test_mutex_example stix2/test/v21/test_observed_data.py::test_process_example stix2/test/v21/test_observed_data.py::test_process_example_empty_error stix2/test/v21/test_observed_data.py::test_process_example_empty_with_extensions stix2/test/v21/test_observed_data.py::test_process_example_windows_process_ext stix2/test/v21/test_observed_data.py::test_process_example_windows_process_ext_empty stix2/test/v21/test_observed_data.py::test_process_example_extensions_empty stix2/test/v21/test_observed_data.py::test_process_example_with_WindowsProcessExt_Object stix2/test/v21/test_observed_data.py::test_process_example_with_WindowsServiceExt stix2/test/v21/test_observed_data.py::test_process_example_with_WindowsProcessServiceExt stix2/test/v21/test_observed_data.py::test_software_example stix2/test/v21/test_observed_data.py::test_url_example stix2/test/v21/test_observed_data.py::test_user_account_example stix2/test/v21/test_observed_data.py::test_user_account_unix_account_ext_example stix2/test/v21/test_observed_data.py::test_windows_registry_key_example stix2/test/v21/test_observed_data.py::test_x509_certificate_example stix2/test/v21/test_observed_data.py::test_new_version_with_related_objects stix2/test/v21/test_observed_data.py::test_objects_deprecation stix2/test/v21/test_observed_data.py::test_deterministic_id_same_extra_prop_vals stix2/test/v21/test_observed_data.py::test_deterministic_id_diff_extra_prop_vals stix2/test/v21/test_observed_data.py::test_deterministic_id_diff_contributing_prop_vals stix2/test/v21/test_observed_data.py::test_deterministic_id_no_contributing_props stix2/test/v21/test_observed_data.py::test_ipv4_resolves_to_refs_deprecation stix2/test/v21/test_observed_data.py::test_ipv4_belongs_to_refs_deprecation stix2/test/v21/test_observed_data.py::test_ipv6_resolves_to_refs_deprecation stix2/test/v21/test_observed_data.py::test_ipv6_belongs_to_refs_deprecation stix2/test/v21/test_properties.py::test_property stix2/test/v21/test_properties.py::test_basic_clean stix2/test/v21/test_properties.py::test_property_default stix2/test/v21/test_properties.py::test_fixed_property stix2/test/v21/test_properties.py::test_list_property stix2/test/v21/test_properties.py::test_string_property stix2/test/v21/test_properties.py::test_type_property stix2/test/v21/test_properties.py::test_id_property_valid[my-type--232c9d3f-49fc-4440-bb01-607f638778e7] stix2/test/v21/test_properties.py::test_id_property_valid[my-type--00000000-0000-4000-8000-000000000000] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[attack-pattern--0c7b5b88-8ff7-4a4d-aa9d-feb398cd0061] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[campaign--8e2e2d2b-17d4-4cbf-938f-98ee46b3cd3f] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[course-of-action--8e2e2d2b-17d4-4cbf-938f-98ee46b3cd3f] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[identity--311b2d2d-f010-4473-83ec-1edf84858f4c] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[indicator--a740531e-63ff-4e49-a9e1-a0a3eed0e3e7] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[intrusion-set--4e78f46f-a023-4e5f-bc24-71b3ca22ec29] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[malware--9c4638ec-f1de-4ddb-abf4-1b760417654e] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[marking-definition--613f2e26-407d-48c7-9eca-b8e91df99dc9_0] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[observed-data--b67d30ff-02ac-498a-92f9-32f845f448cf] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[relationship--df7c87eb-75d2-4948-af81-9d49d246f301] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[report--84e4d88f-44ea-4bcd-bbf3-b2c1c320bcb3] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[sighting--bfbc19db-ec35-4e45-beed-f8bde2a772fb] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[threat-actor--8e2e2d2b-17d4-4cbf-938f-98ee46b3cd3f] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[tool--8e2e2d2b-17d4-4cbf-938f-98ee46b3cd3f] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[vulnerability--0c7b5b88-8ff7-4a4d-aa9d-feb398cd0061] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[marking-definition--613f2e26-407d-48c7-9eca-b8e91df99dc9_1] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[marking-definition--443eb5c3-a76c-4a0a-8caa-e93998e7bc09] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[marking-definition--57fcd772-9c1d-41b0-8d1f-3d47713415d9] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[marking-definition--462bf1a6-03d2-419c-b74e-eee2238b2de4] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[marking-definition--68520ae2-fefe-43a9-84ee-2c2a934d2c7d] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[marking-definition--2802dfb1-1019-40a8-8848-68d0ec0e417f] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[relationship--06520621-5352-4e6a-b976-e8fa3d437ffd] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[relationship--181c9c09-43e6-45dd-9374-3bec192f05ef] stix2/test/v21/test_properties.py::test_id_property_valid_for_type[relationship--a0cbb21c-8daf-4a7f-96aa-7155a4ef8f70] stix2/test/v21/test_properties.py::test_id_property_wrong_type stix2/test/v21/test_properties.py::test_id_property_not_a_valid_hex_uuid[my-type--foo] stix2/test/v21/test_properties.py::test_id_property_not_a_valid_hex_uuid[my-type--00000000-0000-0000-0000-000000000000] stix2/test/v21/test_properties.py::test_id_property_default stix2/test/v21/test_properties.py::test_integer_property_valid[2] stix2/test/v21/test_properties.py::test_integer_property_valid[-1] stix2/test/v21/test_properties.py::test_integer_property_valid[3.14] stix2/test/v21/test_properties.py::test_integer_property_valid[False] stix2/test/v21/test_properties.py::test_integer_property_invalid_min_with_constraints[-1] stix2/test/v21/test_properties.py::test_integer_property_invalid_min_with_constraints[-100] stix2/test/v21/test_properties.py::test_integer_property_invalid_min_with_constraints[-300] stix2/test/v21/test_properties.py::test_integer_property_invalid_max_with_constraints[181] stix2/test/v21/test_properties.py::test_integer_property_invalid_max_with_constraints[200] stix2/test/v21/test_properties.py::test_integer_property_invalid_max_with_constraints[300] stix2/test/v21/test_properties.py::test_integer_property_invalid[something] stix2/test/v21/test_properties.py::test_integer_property_invalid[value1] stix2/test/v21/test_properties.py::test_float_property_valid[2] stix2/test/v21/test_properties.py::test_float_property_valid[-1] stix2/test/v21/test_properties.py::test_float_property_valid[3.14] stix2/test/v21/test_properties.py::test_float_property_valid[False] stix2/test/v21/test_properties.py::test_float_property_invalid[something] stix2/test/v21/test_properties.py::test_float_property_invalid[value1] stix2/test/v21/test_properties.py::test_boolean_property_valid[True0] stix2/test/v21/test_properties.py::test_boolean_property_valid[False0] stix2/test/v21/test_properties.py::test_boolean_property_valid[True1] stix2/test/v21/test_properties.py::test_boolean_property_valid[False1] stix2/test/v21/test_properties.py::test_boolean_property_valid[true] stix2/test/v21/test_properties.py::test_boolean_property_valid[false] stix2/test/v21/test_properties.py::test_boolean_property_valid[TRUE] stix2/test/v21/test_properties.py::test_boolean_property_valid[FALSE] stix2/test/v21/test_properties.py::test_boolean_property_valid[T] stix2/test/v21/test_properties.py::test_boolean_property_valid[F] stix2/test/v21/test_properties.py::test_boolean_property_valid[t] stix2/test/v21/test_properties.py::test_boolean_property_valid[f] stix2/test/v21/test_properties.py::test_boolean_property_valid[1] stix2/test/v21/test_properties.py::test_boolean_property_valid[0] stix2/test/v21/test_properties.py::test_boolean_property_invalid[abc] stix2/test/v21/test_properties.py::test_boolean_property_invalid[value1] stix2/test/v21/test_properties.py::test_boolean_property_invalid[value2] stix2/test/v21/test_properties.py::test_boolean_property_invalid[2] stix2/test/v21/test_properties.py::test_boolean_property_invalid[-1] stix2/test/v21/test_properties.py::test_reference_property stix2/test/v21/test_properties.py::test_reference_property_specific_type stix2/test/v21/test_properties.py::test_timestamp_property_valid[2017-01-01T12:34:56Z] stix2/test/v21/test_properties.py::test_timestamp_property_valid[2017-01-01 stix2/test/v21/test_properties.py::test_timestamp_property_valid[Jan stix2/test/v21/test_properties.py::test_timestamp_property_invalid stix2/test/v21/test_properties.py::test_binary_property stix2/test/v21/test_properties.py::test_hex_property stix2/test/v21/test_properties.py::test_dictionary_property_valid[d0] stix2/test/v21/test_properties.py::test_dictionary_property_valid[d1] stix2/test/v21/test_properties.py::test_dictionary_no_longer_raises[d0] stix2/test/v21/test_properties.py::test_dictionary_property_invalid_key[d0] stix2/test/v21/test_properties.py::test_dictionary_property_invalid_key[d1] stix2/test/v21/test_properties.py::test_dictionary_property_invalid[d0] stix2/test/v21/test_properties.py::test_property_list_of_dictionary stix2/test/v21/test_properties.py::test_hashes_property_valid[value1] stix2/test/v21/test_properties.py::test_hashes_property_valid[value2] stix2/test/v21/test_properties.py::test_hashes_property_invalid[value0] stix2/test/v21/test_properties.py::test_hashes_property_invalid[value1] stix2/test/v21/test_properties.py::test_embedded_property stix2/test/v21/test_properties.py::test_enum_property_valid[value0] stix2/test/v21/test_properties.py::test_enum_property_valid[value1] stix2/test/v21/test_properties.py::test_enum_property_valid[b] stix2/test/v21/test_properties.py::test_enum_property_clean stix2/test/v21/test_properties.py::test_enum_property_invalid stix2/test/v21/test_properties.py::test_extension_property_valid stix2/test/v21/test_properties.py::test_extension_property_invalid1 stix2/test/v21/test_properties.py::test_extension_property_invalid2 stix2/test/v21/test_properties.py::test_extension_property_invalid_type stix2/test/v21/test_properties.py::test_extension_at_least_one_property_constraint stix2/test/v21/test_properties.py::test_marking_property_error