)]}'
{"tvix/nix-compat/src/wire/bytes_reader.rs":[{"author":{"_account_id":1000082,"name":"Brian Olsen","display_name":"griff","email":"me@griff.name","username":"griff"},"change_message_id":"5eb3a37c28b48a670b9cd28f3aaccc2de70cabeb","unresolved":true,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"                    // SAFETY: we just did populate this, but through limited_buf."},{"line_number":142,"context_line":"                    unsafe { buf.assume_init(bytes_read) }"},{"line_number":143,"context_line":"                    buf.set_filled(bytes_read_before + bytes_read);"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"                    ensure_nonzero_bytes_read(bytes_read)?;"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-rustsrc","patch_set":1,"id":"135d09e1_77f1f43f","line":143,"updated":"2024-04-09 13:53:33.000000000","message":"```suggestion\n                    buf.advance(bytes_read);\n```\n\nThis does the same but avoids having to keep track of existing data in buffer.","commit_id":"5e167889fc1fcde2af54f7b9d747abb8ce52937d"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"87af3e440d008a5c589ede9205b6fcec2060adbf","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"                    // SAFETY: we just did populate this, but through limited_buf."},{"line_number":142,"context_line":"                    unsafe { buf.assume_init(bytes_read) }"},{"line_number":143,"context_line":"                    buf.set_filled(bytes_read_before + bytes_read);"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"                    ensure_nonzero_bytes_read(bytes_read)?;"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-rustsrc","patch_set":1,"id":"baa88d74_462b4106","line":143,"in_reply_to":"135d09e1_77f1f43f","updated":"2024-04-09 19:33:49.000000000","message":"Done","commit_id":"5e167889fc1fcde2af54f7b9d747abb8ce52937d"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"459163d132ddcb03c17f7bc14f4d2c649903f82d","unresolved":true,"context_lines":[{"line_number":323,"context_line":"        let mut r \u003d BytesReader::new(\u0026mut mock, ..MAX_LEN);"},{"line_number":324,"context_line":"        let mut buf \u003d Vec::new();"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        // FIXME: this throws a debug_assert inside tokios read_to_end impl itself."},{"line_number":327,"context_line":"        // Should it?"},{"line_number":328,"context_line":"        r.read_to_end(\u0026mut buf).await.expect_err(\"must fail\");"},{"line_number":329,"context_line":"    }"}],"source_content_type":"text/x-rustsrc","patch_set":1,"id":"6b615400_31364254","line":326,"updated":"2024-04-08 15:06:29.000000000","message":"^","commit_id":"5e167889fc1fcde2af54f7b9d747abb8ce52937d"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"3d722d60a711323492d8e8f02f42f34808b4ba7c","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        let mut r \u003d BytesReader::new(\u0026mut mock, ..MAX_LEN);"},{"line_number":324,"context_line":"        let mut buf \u003d Vec::new();"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        // FIXME: this throws a debug_assert inside tokios read_to_end impl itself."},{"line_number":327,"context_line":"        // Should it?"},{"line_number":328,"context_line":"        r.read_to_end(\u0026mut buf).await.expect_err(\"must fail\");"},{"line_number":329,"context_line":"    }"}],"source_content_type":"text/x-rustsrc","patch_set":1,"id":"b029283d_a895108d","line":326,"in_reply_to":"6b615400_31364254","updated":"2024-04-09 19:57:59.000000000","message":"Done","commit_id":"5e167889fc1fcde2af54f7b9d747abb8ce52937d"},{"author":{"_account_id":1000082,"name":"Brian Olsen","display_name":"griff","email":"me@griff.name","username":"griff"},"change_message_id":"bd9f8473c80fdf04a823a1f02f0c8ddede726f81","unresolved":true,"context_lines":[{"line_number":165,"context_line":"                        // create a buffer only accepting the number of remaining padding bytes."},{"line_number":166,"context_line":"                        let mut buf \u003d [0; 8];"},{"line_number":167,"context_line":"                        let mut padding_buf \u003d tokio::io::ReadBuf::new(\u0026mut buf);"},{"line_number":168,"context_line":"                        let mut padding_buf \u003d padding_buf.take(total_padding_len - pos);"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"                        // read into padding_buf."},{"line_number":171,"context_line":"                        ready!(this.inner.as_mut().poll_read(cx, \u0026mut padding_buf))?;"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"fb0cd0b0_daf995bf","line":168,"updated":"2024-04-09 14:33:44.000000000","message":"```suggestion\n                        let mut padding_buf \u003d padding_buf.take(padding_len_left);\n```","commit_id":"3df97d20dcbd699446403e66aefe3e9562103ad6"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"87af3e440d008a5c589ede9205b6fcec2060adbf","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                        // create a buffer only accepting the number of remaining padding bytes."},{"line_number":166,"context_line":"                        let mut buf \u003d [0; 8];"},{"line_number":167,"context_line":"                        let mut padding_buf \u003d tokio::io::ReadBuf::new(\u0026mut buf);"},{"line_number":168,"context_line":"                        let mut padding_buf \u003d padding_buf.take(total_padding_len - pos);"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"                        // read into padding_buf."},{"line_number":171,"context_line":"                        ready!(this.inner.as_mut().poll_read(cx, \u0026mut padding_buf))?;"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"61c7e688_8e88e05c","line":168,"in_reply_to":"fb0cd0b0_daf995bf","updated":"2024-04-09 19:33:49.000000000","message":"Done","commit_id":"3df97d20dcbd699446403e66aefe3e9562103ad6"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"827261b3bdff200643e7a615170194af10472a43","unresolved":true,"context_lines":[{"line_number":328,"context_line":"        r.read_to_end(\u0026mut buf).await.expect_err(\"must fail\");"},{"line_number":329,"context_line":"    }"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    // TODO"},{"line_number":332,"context_line":"    // - EOF scenarios"},{"line_number":333,"context_line":"    // - other errors from the underlying reader"},{"line_number":334,"context_line":"}"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"1f4c0e89_7ababd19","line":331,"updated":"2024-04-08 21:55:34.000000000","message":"TODO","commit_id":"3df97d20dcbd699446403e66aefe3e9562103ad6"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"5755a65a493b83a44a26f967d096d770b8e0be8c","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        r.read_to_end(\u0026mut buf).await.expect_err(\"must fail\");"},{"line_number":329,"context_line":"    }"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    // TODO"},{"line_number":332,"context_line":"    // - EOF scenarios"},{"line_number":333,"context_line":"    // - other errors from the underlying reader"},{"line_number":334,"context_line":"}"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"0312d602_246ef1cf","line":331,"in_reply_to":"1f4c0e89_7ababd19","updated":"2024-04-10 12:02:50.000000000","message":"Done","commit_id":"3df97d20dcbd699446403e66aefe3e9562103ad6"},{"author":{"_account_id":1000082,"name":"Brian Olsen","display_name":"griff","email":"me@griff.name","username":"griff"},"change_message_id":"bd9f8473c80fdf04a823a1f02f0c8ddede726f81","unresolved":true,"context_lines":[{"line_number":168,"context_line":"                        let mut padding_buf \u003d padding_buf.take(total_padding_len - pos);"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"                        // read into padding_buf."},{"line_number":171,"context_line":"                        ready!(this.inner.as_mut().poll_read(cx, \u0026mut padding_buf))?;"},{"line_number":172,"context_line":"                        let bytes_read \u003d dbg!(padding_buf.filled().len());"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"                        dbg!(ensure_nonzero_bytes_read(bytes_read))?;"}],"source_content_type":"text/x-rustsrc","patch_set":3,"id":"7357cf27_4573752d","line":171,"updated":"2024-04-09 14:33:44.000000000","message":"We can\u0027t use ? here because if this fails we need to make sure we reset any filled state in buf before returning the error.","commit_id":"429a700a5f50daa1596dddd08d202d97b93e70b4"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"87af3e440d008a5c589ede9205b6fcec2060adbf","unresolved":true,"context_lines":[{"line_number":168,"context_line":"                        let mut padding_buf \u003d padding_buf.take(total_padding_len - pos);"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"                        // read into padding_buf."},{"line_number":171,"context_line":"                        ready!(this.inner.as_mut().poll_read(cx, \u0026mut padding_buf))?;"},{"line_number":172,"context_line":"                        let bytes_read \u003d dbg!(padding_buf.filled().len());"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"                        dbg!(ensure_nonzero_bytes_read(bytes_read))?;"}],"source_content_type":"text/x-rustsrc","patch_set":3,"id":"8d596493_216dfa99","line":171,"in_reply_to":"7357cf27_4573752d","updated":"2024-04-09 19:33:49.000000000","message":"As discussed, we always return once at the end of the Payload section now, so don\u0027t need to worry about resetting filled state in `buf` - the Padding stage never writes into there.","commit_id":"429a700a5f50daa1596dddd08d202d97b93e70b4"},{"author":{"_account_id":1000082,"name":"Brian Olsen","display_name":"griff","email":"me@griff.name","username":"griff"},"change_message_id":"9ad8d2f204fb0a588df16d58409b284501312005","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                        let mut padding_buf \u003d padding_buf.take(total_padding_len - pos);"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"                        // read into padding_buf."},{"line_number":171,"context_line":"                        ready!(this.inner.as_mut().poll_read(cx, \u0026mut padding_buf))?;"},{"line_number":172,"context_line":"                        let bytes_read \u003d dbg!(padding_buf.filled().len());"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"                        dbg!(ensure_nonzero_bytes_read(bytes_read))?;"}],"source_content_type":"text/x-rustsrc","patch_set":3,"id":"5df05d1b_74dd9f2f","line":171,"in_reply_to":"8d596493_216dfa99","updated":"2024-04-09 21:01:07.000000000","message":"Done","commit_id":"429a700a5f50daa1596dddd08d202d97b93e70b4"},{"author":{"_account_id":1000082,"name":"Brian Olsen","display_name":"griff","email":"me@griff.name","username":"griff"},"change_message_id":"bd9f8473c80fdf04a823a1f02f0c8ddede726f81","unresolved":true,"context_lines":[{"line_number":178,"context_line":"                        *this.state \u003d BytesPacketPosition::Padding(pos + bytes_read);"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"                        // ensure the bytes are not null bytes"},{"line_number":181,"context_line":"                        if !padding_buf.filled().iter().all(|e| *e \u003d\u003d b\u0027\\0\u0027) {"},{"line_number":182,"context_line":"                            return Err(std::io::Error::new("},{"line_number":183,"context_line":"                                std::io::ErrorKind::InvalidData,"},{"line_number":184,"context_line":"                                \"padding is not all zeroes\","}],"source_content_type":"text/x-rustsrc","patch_set":3,"id":"773ae012_050b15b0","line":181,"updated":"2024-04-09 14:33:44.000000000","message":"Reset any filled state in buf before returning error.","commit_id":"429a700a5f50daa1596dddd08d202d97b93e70b4"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"87af3e440d008a5c589ede9205b6fcec2060adbf","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                        *this.state \u003d BytesPacketPosition::Padding(pos + bytes_read);"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"                        // ensure the bytes are not null bytes"},{"line_number":181,"context_line":"                        if !padding_buf.filled().iter().all(|e| *e \u003d\u003d b\u0027\\0\u0027) {"},{"line_number":182,"context_line":"                            return Err(std::io::Error::new("},{"line_number":183,"context_line":"                                std::io::ErrorKind::InvalidData,"},{"line_number":184,"context_line":"                                \"padding is not all zeroes\","}],"source_content_type":"text/x-rustsrc","patch_set":3,"id":"e7da7cf8_1d825b50","line":181,"in_reply_to":"773ae012_050b15b0","updated":"2024-04-09 19:33:49.000000000","message":"As discussed, we always return once at the end of the Payload section now, so don\u0027t need to worry about resetting filled state in `buf` - the Padding stage never writes into there.","commit_id":"429a700a5f50daa1596dddd08d202d97b93e70b4"},{"author":{"_account_id":1000082,"name":"Brian Olsen","display_name":"griff","email":"me@griff.name","username":"griff"},"change_message_id":"6b9494e27460985434a4ab941679a517b76a4ab8","unresolved":true,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"                    // The passed buffer might already contain some filled data,"},{"line_number":137,"context_line":"                    // so we need to keep track of that number before filling it further."},{"line_number":138,"context_line":"                    let bytes_read_before \u003d buf.filled().len();"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"                    // Read from the underlying reader into buf"},{"line_number":141,"context_line":"                    // We cap the ReadBuf to the size of the payload, as we"}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"dfc69a36_ecfe5ea0","line":138,"updated":"2024-04-10 14:24:10.000000000","message":"If you use advance you don\u0027t need this.","commit_id":"4f0d194cd0c4748017005d3464758aaf3fc025f2"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"3a96d638a174d6807a252fe3f3985ab2a8c35c6d","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"                    // The passed buffer might already contain some filled data,"},{"line_number":137,"context_line":"                    // so we need to keep track of that number before filling it further."},{"line_number":138,"context_line":"                    let bytes_read_before \u003d buf.filled().len();"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"                    // Read from the underlying reader into buf"},{"line_number":141,"context_line":"                    // We cap the ReadBuf to the size of the payload, as we"}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"fa9a3ffc_9d6f0845","line":138,"in_reply_to":"dfc69a36_ecfe5ea0","updated":"2024-04-10 16:53:50.000000000","message":"Nice catch! Applied.","commit_id":"4f0d194cd0c4748017005d3464758aaf3fc025f2"},{"author":{"_account_id":1000082,"name":"Brian Olsen","display_name":"griff","email":"me@griff.name","username":"griff"},"change_message_id":"6b9494e27460985434a4ab941679a517b76a4ab8","unresolved":true,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"                    // SAFETY: we just did populate this, but through limited_buf."},{"line_number":152,"context_line":"                    unsafe { buf.assume_init(bytes_read) }"},{"line_number":153,"context_line":"                    buf.set_filled(bytes_read_before + bytes_read);"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"                    if pos + bytes_read as u64 \u003d\u003d signalled_size {"},{"line_number":156,"context_line":"                        // If we now read all payload, transition to padding"}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"7c88c943_effa91f5","line":153,"updated":"2024-04-10 14:24:10.000000000","message":"```suggestion\n                    buf.advannce(bytes_read);\n```","commit_id":"4f0d194cd0c4748017005d3464758aaf3fc025f2"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"3a96d638a174d6807a252fe3f3985ab2a8c35c6d","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"                    // SAFETY: we just did populate this, but through limited_buf."},{"line_number":152,"context_line":"                    unsafe { buf.assume_init(bytes_read) }"},{"line_number":153,"context_line":"                    buf.set_filled(bytes_read_before + bytes_read);"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"                    if pos + bytes_read as u64 \u003d\u003d signalled_size {"},{"line_number":156,"context_line":"                        // If we now read all payload, transition to padding"}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"6cb96d80_527aef73","line":153,"in_reply_to":"7c88c943_effa91f5","updated":"2024-04-10 16:53:50.000000000","message":"Done","commit_id":"4f0d194cd0c4748017005d3464758aaf3fc025f2"},{"author":{"_account_id":1000073,"name":"raitobezarius","display_name":"Ryan Lahfa","email":"tvl@lahfa.xyz","username":"raitobezarius"},"change_message_id":"9c1385615f141fe880bd8b550692522c9f90ba0a","unresolved":true,"context_lines":[{"line_number":62,"context_line":"    }"},{"line_number":63,"context_line":"}"},{"line_number":64,"context_line":"/// Returns an error if the passed usize is 0."},{"line_number":65,"context_line":"fn ensure_nonzero_bytes_read(bytes_read: usize) -\u003e Result\u003cusize, std::io::Error\u003e {"},{"line_number":66,"context_line":"    if bytes_read \u003d\u003d 0 {"},{"line_number":67,"context_line":"        Err(std::io::Error::new("},{"line_number":68,"context_line":"            std::io::ErrorKind::UnexpectedEof,"}],"source_content_type":"text/x-rustsrc","patch_set":7,"id":"393fb45b_7e1652b0","line":65,"updated":"2024-04-12 22:22:55.000000000","message":"`#[inline]` I\u0027d say","commit_id":"600cf8197674ea7cd7d5734755cd1d820e7f365c"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"0913223020312b73c99875ac0430d91ee5f74e73","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    }"},{"line_number":63,"context_line":"}"},{"line_number":64,"context_line":"/// Returns an error if the passed usize is 0."},{"line_number":65,"context_line":"fn ensure_nonzero_bytes_read(bytes_read: usize) -\u003e Result\u003cusize, std::io::Error\u003e {"},{"line_number":66,"context_line":"    if bytes_read \u003d\u003d 0 {"},{"line_number":67,"context_line":"        Err(std::io::Error::new("},{"line_number":68,"context_line":"            std::io::ErrorKind::UnexpectedEof,"}],"source_content_type":"text/x-rustsrc","patch_set":7,"id":"7945a5e3_dea292a5","line":65,"in_reply_to":"393fb45b_7e1652b0","updated":"2024-04-13 10:09:27.000000000","message":"I\u0027ll add it in a followup, both here and for the `BytesWriter`.","commit_id":"600cf8197674ea7cd7d5734755cd1d820e7f365c"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"355f4ac0cf5c5ebe69ba1f728cd19346e54243ed","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    }"},{"line_number":63,"context_line":"}"},{"line_number":64,"context_line":"/// Returns an error if the passed usize is 0."},{"line_number":65,"context_line":"fn ensure_nonzero_bytes_read(bytes_read: usize) -\u003e Result\u003cusize, std::io::Error\u003e {"},{"line_number":66,"context_line":"    if bytes_read \u003d\u003d 0 {"},{"line_number":67,"context_line":"        Err(std::io::Error::new("},{"line_number":68,"context_line":"            std::io::ErrorKind::UnexpectedEof,"}],"source_content_type":"text/x-rustsrc","patch_set":7,"id":"8e3756cf_b477c8f0","line":65,"in_reply_to":"7945a5e3_dea292a5","updated":"2024-04-13 11:22:24.000000000","message":"cl/11403.","commit_id":"600cf8197674ea7cd7d5734755cd1d820e7f365c"}],"tvix/nix-compat/src/wire/bytes_writer.rs":[{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"ea580bc114e880b7de007ff2fb9f3a9b2995aa38","unresolved":true,"context_lines":[{"line_number":6,"context_line":"use super::bytes::EMPTY_BYTES;"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"/// The length of the size field, in bytes is always 8."},{"line_number":9,"context_line":"pub(crate) const LEN_SIZE: usize \u003d 8;"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"pin_project! {"},{"line_number":12,"context_line":"    /// Writes a \"bytes wire packet\" to the underlying writer."}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"fa63c273_d1dd6f19","line":9,"updated":"2024-04-08 22:21:08.000000000","message":"TODO: have a bytes/mod.rs, documenting the bytes packet and containing the {read, write}_bytes function, bytes/{reader,writer}.rs containing reader and writer, respectively.\n\nThings like LEN_SIZE and the state enum then don\u0027t need to be public for the whole crate anymore.\n\nalso, ensure read_bytes docstring is updated.","commit_id":"3df97d20dcbd699446403e66aefe3e9562103ad6"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"5755a65a493b83a44a26f967d096d770b8e0be8c","unresolved":false,"context_lines":[{"line_number":6,"context_line":"use super::bytes::EMPTY_BYTES;"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"/// The length of the size field, in bytes is always 8."},{"line_number":9,"context_line":"pub(crate) const LEN_SIZE: usize \u003d 8;"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"pin_project! {"},{"line_number":12,"context_line":"    /// Writes a \"bytes wire packet\" to the underlying writer."}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"2054bbae_5e930b3e","line":9,"in_reply_to":"fa63c273_d1dd6f19","updated":"2024-04-10 12:02:50.000000000","message":"done in cl/11389.","commit_id":"3df97d20dcbd699446403e66aefe3e9562103ad6"}]}
