)]}'
{"keystone/api/domains.py":[{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"980bc9bb007e4a7786b7bebfebe37c8c9cf3818d","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        if domain_id is None:"},{"line_number":101,"context_line":"            domain \u003d self._assign_unique_id(domain)"},{"line_number":102,"context_line":"        else:"},{"line_number":103,"context_line":"            # Domain ID validation provided by PyCADF"},{"line_number":104,"context_line":"            domain[\u0027id\u0027] \u003d domain_id"},{"line_number":105,"context_line":"        domain \u003d self._normalize_dict(domain)"},{"line_number":106,"context_line":"        ref \u003d PROVIDERS.resource_api.create_domain("}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_414e6896","line":103,"range":{"start_line":103,"start_character":12,"end_line":103,"end_character":53},"updated":"2018-10-02 14:57:48.000000000","message":"Where is that validation being handled? What happens if it throws an exception? I see your test, I\u0027m just not sure how that gets bubbled back up here when something goes awry.","commit_id":"661f0b8a3f410c3cbac7ee90786f08944a47df1d"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"d8dbdb75e6648ccea30aa754327d339491e8bf17","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        if domain_id is None:"},{"line_number":101,"context_line":"            domain \u003d self._assign_unique_id(domain)"},{"line_number":102,"context_line":"        else:"},{"line_number":103,"context_line":"            # Domain ID validation provided by PyCADF"},{"line_number":104,"context_line":"            domain[\u0027id\u0027] \u003d domain_id"},{"line_number":105,"context_line":"        domain \u003d self._normalize_dict(domain)"},{"line_number":106,"context_line":"        ref \u003d PROVIDERS.resource_api.create_domain("}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_6ceef8b5","line":103,"range":{"start_line":103,"start_character":12,"end_line":103,"end_character":53},"in_reply_to":"3f79a3b5_414e6896","updated":"2018-10-02 17:27:11.000000000","message":"This isn\u0027t how that works. Please supply real validation here, it should conform to the rules (the only exceptional domains are the root, a known id, and default also a known id, and should not be allowed here).\n\nConforming to rules would be uuid (afaict). Please supply validation here or in the schema (json_schema) do not assume the validation is done by pyCADF or something external unless we specifically test for it.","commit_id":"661f0b8a3f410c3cbac7ee90786f08944a47df1d"},{"author":{"_account_id":28032,"name":"Oleksiy Petrenko","email":"opetrenko@mirantis.com","username":"enacero"},"change_message_id":"2cbb42e3dd4312153f7e54013bcd3df7644682a0","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            try:"},{"line_number":123,"context_line":"                self._validate_unique_id(domain_id)"},{"line_number":124,"context_line":"            except ValueError:"},{"line_number":125,"context_line":"                raise exception.DomainIdInvalid"},{"line_number":126,"context_line":"            domain[\u0027id\u0027] \u003d domain_id"},{"line_number":127,"context_line":"        domain \u003d self._normalize_dict(domain)"},{"line_number":128,"context_line":"        ref \u003d PROVIDERS.resource_api.create_domain("}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_1f43ca43","line":125,"range":{"start_line":125,"start_character":46,"end_line":125,"end_character":47},"updated":"2019-02-01 14:42:13.000000000","message":"Shouldn\u0027t we raise exceptions object rather than raise class?","commit_id":"9b86b0be25c69cf63dafc76d92c8bc02e206ed34"}],"keystone/exception.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"9b8ca44ff66f210e89e3afe1ea4dbcb42dd12e43","unresolved":false,"context_lines":[{"line_number":430,"context_line":""},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"class DomainIdInvalid(ValidationError):"},{"line_number":433,"context_line":"    message_format \u003d _(\"Domain ID does not conform to required format.\")"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"class RoleAssignmentNotFound(NotFound):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5fc1f717_81d5d3e7","line":433,"updated":"2019-04-02 18:06:33.000000000","message":"Would be more friendly to explain what the correct format is.","commit_id":"44aebf7613aaf2665338fce120c1e56e6b9dcf6a"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"634976461e872dbbd8d756b88141e16b75e50a03","unresolved":false,"context_lines":[{"line_number":430,"context_line":""},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"class DomainIdInvalid(ValidationError):"},{"line_number":433,"context_line":"    message_format \u003d _(\"Domain ID does not conform to required format.\")"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"class RoleAssignmentNotFound(NotFound):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5fc1f717_8b5fdc3f","line":433,"in_reply_to":"5fc1f717_81d5d3e7","updated":"2019-04-06 16:41:42.000000000","message":"+1","commit_id":"44aebf7613aaf2665338fce120c1e56e6b9dcf6a"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"ee5918ac2e29bb4930e44bd2dc1715e93dd7834c","unresolved":false,"context_lines":[{"line_number":430,"context_line":""},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"class DomainIdInvalid(ValidationError):"},{"line_number":433,"context_line":"    message_format \u003d _(\"Domain ID does not conform to required format.\")"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"class RoleAssignmentNotFound(NotFound):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5fc1f717_2e37d5b2","line":433,"in_reply_to":"5fc1f717_8b5fdc3f","updated":"2019-04-06 23:22:05.000000000","message":"How about \"Domain ID does not conform to required UUID5 format\" instead?","commit_id":"44aebf7613aaf2665338fce120c1e56e6b9dcf6a"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"241a08e2284d252d62f38618c9c5fa8078880ef0","unresolved":false,"context_lines":[{"line_number":430,"context_line":""},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"class DomainIdInvalid(ValidationError):"},{"line_number":433,"context_line":"    message_format \u003d _(\"Domain ID does not conform to required UUID5 format.\")"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"class RoleAssignmentNotFound(NotFound):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5fc1f717_e30c6d43","line":433,"range":{"start_line":433,"start_character":63,"end_line":433,"end_character":68},"updated":"2019-04-08 21:17:12.000000000","message":"uuid.UUID() is successful no matter whether it is UUID5 or some other version, if any UUID format is okay then let\u0027s just say UUID.","commit_id":"63e22ef3b39c38da7012d815c4a0215a19252c54"}],"keystone/resource/core.py":[{"author":{"_account_id":28032,"name":"Oleksiy Petrenko","email":"opetrenko@mirantis.com","username":"enacero"},"change_message_id":"2cbb42e3dd4312153f7e54013bcd3df7644682a0","unresolved":false,"context_lines":[{"line_number":188,"context_line":"            return _(\u0027it is not permitted to have two projects \u0027"},{"line_number":189,"context_line":"                     \u0027with either the same name or same id in \u0027"},{"line_number":190,"context_line":"                     \u0027the same domain: \u0027"},{"line_number":191,"context_line":"                     \u0027name is %{name}s, project id %{project_id}s\u0027"},{"line_number":192,"context_line":"                     ) % project"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def create_project(self, project_id, project, initiator\u003dNone):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_dc579025","line":191,"range":{"start_line":191,"start_character":32,"end_line":191,"end_character":64},"updated":"2019-02-01 14:42:13.000000000","message":"I guess `%{var}s` is not working. Probably you mean `%(var)s` format since current format broke CI.","commit_id":"9b86b0be25c69cf63dafc76d92c8bc02e206ed34"}],"keystone/server/flask/common.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"9b8ca44ff66f210e89e3afe1ea4dbcb42dd12e43","unresolved":false,"context_lines":[{"line_number":606,"context_line":""},{"line_number":607,"context_line":"    @staticmethod"},{"line_number":608,"context_line":"    def _validate_unique_id(id):"},{"line_number":609,"context_line":"        uval \u003d uuid.UUID(id).hex"},{"line_number":610,"context_line":"        if uval !\u003d id:"},{"line_number":611,"context_line":"            raise ValueError(\u0027badly formed hexadecimal UUID value\u0027)"},{"line_number":612,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5fc1f717_0111e3ac","line":609,"updated":"2019-04-02 18:06:33.000000000","message":"This validates that the given ID is a valid UUID but not that it\u0027s unique - the user could have accidentally copied an ID from another project or domain.","commit_id":"44aebf7613aaf2665338fce120c1e56e6b9dcf6a"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"ee5918ac2e29bb4930e44bd2dc1715e93dd7834c","unresolved":false,"context_lines":[{"line_number":606,"context_line":""},{"line_number":607,"context_line":"    @staticmethod"},{"line_number":608,"context_line":"    def _validate_unique_id(id):"},{"line_number":609,"context_line":"        uval \u003d uuid.UUID(id).hex"},{"line_number":610,"context_line":"        if uval !\u003d id:"},{"line_number":611,"context_line":"            raise ValueError(\u0027badly formed hexadecimal UUID value\u0027)"},{"line_number":612,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5fc1f717_ae4ae523","line":609,"in_reply_to":"5fc1f717_0111e3ac","updated":"2019-04-06 23:22:05.000000000","message":"changed to: ._validate_id_format","commit_id":"44aebf7613aaf2665338fce120c1e56e6b9dcf6a"}],"keystone/tests/unit/resource/test_core.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"9b8ca44ff66f210e89e3afe1ea4dbcb42dd12e43","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        self.assertRaises(exception.Conflict,"},{"line_number":61,"context_line":"                          PROVIDERS.resource_api.update_project,"},{"line_number":62,"context_line":"                          project[\u0027id\u0027], {\u0027name\u0027: project1[\u0027name\u0027],"},{"line_number":63,"context_line":"                                          \u0027id\u0027: project[\u0027id\u0027]})"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class DomainConfigDriverTests(object):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5fc1f717_41ca8b1a","line":63,"range":{"start_line":63,"start_character":42,"end_line":63,"end_character":61},"updated":"2019-04-02 18:06:33.000000000","message":"Could this be split into a separate test instead of piggybacking on the project_name_conflict test?","commit_id":"44aebf7613aaf2665338fce120c1e56e6b9dcf6a"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"ee5918ac2e29bb4930e44bd2dc1715e93dd7834c","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        self.assertRaises(exception.Conflict,"},{"line_number":61,"context_line":"                          PROVIDERS.resource_api.update_project,"},{"line_number":62,"context_line":"                          project[\u0027id\u0027], {\u0027name\u0027: project1[\u0027name\u0027],"},{"line_number":63,"context_line":"                                          \u0027id\u0027: project[\u0027id\u0027]})"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class DomainConfigDriverTests(object):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5fc1f717_ce47311d","line":63,"range":{"start_line":63,"start_character":42,"end_line":63,"end_character":61},"in_reply_to":"5fc1f717_41ca8b1a","updated":"2019-04-06 23:22:05.000000000","message":"I can add an additional test, but this change is still required to make the call to update_project work.","commit_id":"44aebf7613aaf2665338fce120c1e56e6b9dcf6a"}],"keystone/tests/unit/test_v3_resource.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"d8dbdb75e6648ccea30aa754327d339491e8bf17","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def test_create_domain_valid_explicit_id(self):"},{"line_number":146,"context_line":"        \"\"\"Call ``POST /domains``.\"\"\""},{"line_number":147,"context_line":"        ref \u003d unit.new_domain_ref()"},{"line_number":148,"context_line":"        explicit_domain_id \u003d \u0027f3537e7a-6cfa-4df5-a7e9-9ca52fcae3b5\u0027"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        ref[\u0027explicit_domain_id\u0027] \u003d explicit_domain_id"},{"line_number":151,"context_line":"        r \u003d self.post("}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_8c3ef423","line":148,"range":{"start_line":148,"start_character":29,"end_line":148,"end_character":67},"updated":"2018-10-02 17:27:11.000000000","message":"This is not a valid domain id (according to what keystone does internally at this point), uuid4().hex, validation is not properly being handled.","commit_id":"661f0b8a3f410c3cbac7ee90786f08944a47df1d"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"d8dbdb75e6648ccea30aa754327d339491e8bf17","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        explicit_domain_id \u003d \u0027f3537e7a-6cfa-4df5-a7e9-9ca52fcae3b5\u0027"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        ref[\u0027explicit_domain_id\u0027] \u003d explicit_domain_id"},{"line_number":151,"context_line":"        r \u003d self.post("},{"line_number":152,"context_line":"            \u0027/domains\u0027,"},{"line_number":153,"context_line":"            body\u003d{\u0027domain\u0027: ref})"},{"line_number":154,"context_line":"        self.assertValidDomainResponse(r, ref)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_ec08c880","line":151,"range":{"start_line":151,"start_character":8,"end_line":151,"end_character":22},"updated":"2018-10-02 17:27:11.000000000","message":"[NIT, if you can make it work, do that, but don\u0027t stress too much if you can\u0027t] Suggest using the \"with self.test_client() as c:\" mechanism instead of adding more layers into the tests that need to be re-worked.","commit_id":"661f0b8a3f410c3cbac7ee90786f08944a47df1d"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"d8dbdb75e6648ccea30aa754327d339491e8bf17","unresolved":false,"context_lines":[{"line_number":161,"context_line":"    def test_create_domain_invalid_explicit_id(self):"},{"line_number":162,"context_line":"        \"\"\"Call ``POST /domains``.\"\"\""},{"line_number":163,"context_line":"        ref \u003d unit.new_domain_ref()"},{"line_number":164,"context_line":"        explicit_domain_id \u003d \u0027bad!\u0027"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        ref[\u0027explicit_domain_id\u0027] \u003d explicit_domain_id"},{"line_number":167,"context_line":"        self.post(\u0027/domains\u0027, body\u003d{\u0027domain\u0027: {}},"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_2c7800f6","line":164,"range":{"start_line":164,"start_character":28,"end_line":164,"end_character":35},"updated":"2018-10-02 17:27:11.000000000","message":"I would like to see a series of examples that are sort-of fuzz testing this rather than a single example. Does \"bad\" work? it\u0027s all hex characters, what about \u00271234567890123456789012345678901234567890\u0027, etc. \n\nThe id length should be strictly conforming to the result if keystone generated the id and we need expanded testing to ensure edge cases are somewhat covered.","commit_id":"661f0b8a3f410c3cbac7ee90786f08944a47df1d"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"634976461e872dbbd8d756b88141e16b75e50a03","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        self.assertIsNotNone(r.result[\u0027domain\u0027])"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def test_create_domain_valid_explicit_id(self):"},{"line_number":146,"context_line":"        \"\"\"Call ``POST /domains``.\"\"\""},{"line_number":147,"context_line":"        ref \u003d unit.new_domain_ref()"},{"line_number":148,"context_line":"        explicit_domain_id \u003d \u00279aea63518f0040c6b4518d8d2242911c\u0027"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5fc1f717_4b55741d","line":146,"updated":"2019-04-06 16:41:42.000000000","message":"This can be more descriptive: Call ``POST /domains`` with a valid `explicit_domain_id` set.","commit_id":"44aebf7613aaf2665338fce120c1e56e6b9dcf6a"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"634976461e872dbbd8d756b88141e16b75e50a03","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            ref[\u0027explicit_domain_id\u0027] \u003d explicit_domain_id"},{"line_number":173,"context_line":"            self.post(\u0027/domains\u0027, body\u003d{\u0027domain\u0027: {}},"},{"line_number":174,"context_line":"                      expected_status\u003dhttp_client.BAD_REQUEST)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def test_list_head_domains(self):"},{"line_number":177,"context_line":"        \"\"\"Call ``GET \u0026 HEAD /domains``.\"\"\""},{"line_number":178,"context_line":"        resource_url \u003d \u0027/domains\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"5fc1f717_0b31ac0b","line":175,"updated":"2019-04-06 16:41:42.000000000","message":"It needs a test case where you try to set the same explicit ID for two different domains.","commit_id":"44aebf7613aaf2665338fce120c1e56e6b9dcf6a"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"ee5918ac2e29bb4930e44bd2dc1715e93dd7834c","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            ref[\u0027explicit_domain_id\u0027] \u003d explicit_domain_id"},{"line_number":173,"context_line":"            self.post(\u0027/domains\u0027, body\u003d{\u0027domain\u0027: {}},"},{"line_number":174,"context_line":"                      expected_status\u003dhttp_client.BAD_REQUEST)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def test_list_head_domains(self):"},{"line_number":177,"context_line":"        \"\"\"Call ``GET \u0026 HEAD /domains``.\"\"\""},{"line_number":178,"context_line":"        resource_url \u003d \u0027/domains\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"5fc1f717_0e0f7988","line":175,"in_reply_to":"5fc1f717_0b31ac0b","updated":"2019-04-06 23:22:05.000000000","message":"Done","commit_id":"44aebf7613aaf2665338fce120c1e56e6b9dcf6a"}],"releasenotes/notes/bug-1794527-866b1caff67977f3.yaml":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"9b8ca44ff66f210e89e3afe1ea4dbcb42dd12e43","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Allow the creating of a domain with the additional, optional"},{"line_number":5,"context_line":"    parameter of `explicit_domain_id` instead of auto-creating a"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"5fc1f717_e1aff77a","line":2,"updated":"2019-04-02 18:06:33.000000000","message":"This should reference the spec or blueprint/RFE bug","commit_id":"44aebf7613aaf2665338fce120c1e56e6b9dcf6a"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"241a08e2284d252d62f38618c9c5fa8078880ef0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Allow the creating of a domain with the additional, optional"},{"line_number":5,"context_line":"    parameter of `explicit_domain_id` instead of auto-creating a"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"5fc1f717_c38a91ba","line":2,"in_reply_to":"5fc1f717_6e1dddbc","updated":"2019-04-08 21:17:12.000000000","message":"By the RFE bug: \n\n [`bug 1794527 \u003chttps://bugs.launchpad.net/keystone/+bug/1794527\u003e`_]","commit_id":"44aebf7613aaf2665338fce120c1e56e6b9dcf6a"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"ee5918ac2e29bb4930e44bd2dc1715e93dd7834c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Allow the creating of a domain with the additional, optional"},{"line_number":5,"context_line":"    parameter of `explicit_domain_id` instead of auto-creating a"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"5fc1f717_6e1dddbc","line":2,"in_reply_to":"5fc1f717_e1aff77a","updated":"2019-04-06 23:22:05.000000000","message":"https://specs.openstack.org/openstack/keystone-specs/specs/keystone/stein/explicit-domains-ids.html  But it is under stein.  How do you want it referenced?","commit_id":"44aebf7613aaf2665338fce120c1e56e6b9dcf6a"}]}
