// File: zeeev[P]DASVC/bamtools/src/api/internal/sam/SamFormatParser_p.cpp
// Function: BamTools::Internal::SamFormatParser::ParseRGLine(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
void SamFormatParser::ParseRGLine(const string& line) {

    SamReadGroup rg;

    // split string into tokens
    vector<string> tokens = Split(line, Constants::SAM_TAB);

    // iterate over tokens
    vector<string>::const_iterator tokenIter = tokens.begin();
    vector<string>::const_iterator tokenEnd  = tokens.end();
    for ( ; tokenIter != tokenEnd; ++tokenIter ) {

        // get token tag/value
        const string tokenTag = (*tokenIter).substr(0,2);
        const string tokenValue = (*tokenIter).substr(3);

        // set read group contents
        if      ( tokenTag == Constants::SAM_RG_ID_TAG                  ) rg.ID = tokenValue;
        else if ( tokenTag == Constants::SAM_RG_DESCRIPTION_TAG         ) rg.Description = tokenValue;
        else if ( tokenTag == Constants::SAM_RG_FLOWORDER_TAG           ) rg.FlowOrder = tokenValue;
        else if ( tokenTag == Constants::SAM_RG_KEYSEQUENCE_TAG         ) rg.KeySequence = tokenValue;
        else if ( tokenTag == Constants::SAM_RG_LIBRARY_TAG             ) rg.Library = tokenValue;
        else if ( tokenTag == Constants::SAM_RG_PLATFORMUNIT_TAG        ) rg.PlatformUnit = tokenValue;
        else if ( tokenTag == Constants::SAM_RG_PREDICTEDINSERTSIZE_TAG ) rg.PredictedInsertSize = tokenValue;
        else if ( tokenTag == Constants::SAM_RG_PRODUCTIONDATE_TAG      ) rg.ProductionDate = tokenValue;
        else if ( tokenTag == Constants::SAM_RG_PROGRAM_TAG             ) rg.Program = tokenValue;
        else if ( tokenTag == Constants::SAM_RG_SAMPLE_TAG              ) rg.Sample = tokenValue;
        else if ( tokenTag == Constants::SAM_RG_SEQCENTER_TAG           ) rg.SequencingCenter = tokenValue;
        else if ( tokenTag == Constants::SAM_RG_SEQTECHNOLOGY_TAG       ) rg.SequencingTechnology = tokenValue;
        else { // custom tag
            CustomHeaderTag otherTag;
            otherTag.TagName  = tokenTag;
            otherTag.TagValue = tokenValue;
            rg.CustomTags.push_back(otherTag);
        }
    }

    // check for required tags
    if ( !rg.HasID() )
        throw BamException("SamFormatParser::ParseRGLine", "@RG line is missing ID tag");

    // store SAM read group entry
    m_header.ReadGroups.Add(rg);
}

// Assembly:
subq $0x318, %rsp            # imm = 0x318
movq %rdi, 0x310(%rsp)
movq %rsi, 0x308(%rsp)
movq 0x310(%rsp), %rax
movq %rax, 0x50(%rsp)
leaq 0x170(%rsp), %rdi
callq 0x73ca0
movq 0x50(%rsp), %rsi
movq 0x308(%rsp), %rdx
leaq 0x158(%rsp), %rdi
movl $0x9, %ecx
callq 0x793a0
jmp 0xe2e62
leaq 0x158(%rsp), %rdi
callq 0x7aa40
movq %rax, 0x48(%rsp)
jmp 0xe2e76
movq 0x48(%rsp), %rax
movq %rax, 0x138(%rsp)
leaq 0x140(%rsp), %rdi
leaq 0x138(%rsp), %rsi
callq 0x76ee0
jmp 0xe2e9a
leaq 0x158(%rsp), %rdi
callq 0x7ad60
movq %rax, 0x40(%rsp)
jmp 0xe2eae
movq 0x40(%rsp), %rax
movq %rax, 0x128(%rsp)
leaq 0x130(%rsp), %rdi
leaq 0x128(%rsp), %rsi
callq 0x76ee0
jmp 0xe2ed2
jmp 0xe2ed4
leaq 0x140(%rsp), %rdi
leaq 0x130(%rsp), %rsi
callq 0x750f0
movb %al, 0x3f(%rsp)
jmp 0xe2eef
movb 0x3f(%rsp), %al
testb $0x1, %al
jne 0xe2efc
jmp 0xe33c1
leaq 0x140(%rsp), %rdi
callq 0x71410
movq %rax, 0x30(%rsp)
jmp 0xe2f10
movq 0x30(%rsp), %rsi
xorl %eax, %eax
movl %eax, %edx
leaq 0x108(%rsp), %rdi
movl $0x2, %ecx
callq 0x76c50
jmp 0xe2f2d
leaq 0x140(%rsp), %rdi
callq 0x71410
movq %rax, 0x28(%rsp)
jmp 0xe2f41
movq 0x28(%rsp), %rsi
leaq 0xe8(%rsp), %rdi
movl $0x3, %edx
movq $-0x1, %rcx
callq 0x76c50
jmp 0xe2f61
leaq 0x36160(%rip), %rsi     # 0x1190c8
leaq 0x108(%rsp), %rdi
callq 0x74120
movb %al, 0x27(%rsp)
jmp 0xe2f7b
movb 0x27(%rsp), %al
testb $0x1, %al
jne 0xe2f88
jmp 0xe3008
leaq 0x1b0(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x71240
jmp 0xe2f9f
jmp 0xe3368
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x150(%rsp)
movl %eax, 0x14c(%rsp)
jmp 0xe3561
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x150(%rsp)
movl %eax, 0x14c(%rsp)
jmp 0xe3550
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x150(%rsp)
movl %eax, 0x14c(%rsp)
jmp 0xe33ad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x150(%rsp)
movl %eax, 0x14c(%rsp)
jmp 0xe339c
leaq 0x36079(%rip), %rsi     # 0x119088
leaq 0x108(%rsp), %rdi
callq 0x74120
movb %al, 0x26(%rsp)
jmp 0xe3022
movb 0x26(%rsp), %al
testb $0x1, %al
jne 0xe302c
jmp 0xe3048
leaq 0x170(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x71240
jmp 0xe3043
jmp 0xe3366
leaq 0x36059(%rip), %rsi     # 0x1190a8
leaq 0x108(%rsp), %rdi
callq 0x74120
movb %al, 0x25(%rsp)
jmp 0xe3062
movb 0x25(%rsp), %al
testb $0x1, %al
jne 0xe306c
jmp 0xe3088
leaq 0x190(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x71240
jmp 0xe3083
jmp 0xe3364
leaq 0x36059(%rip), %rsi     # 0x1190e8
leaq 0x108(%rsp), %rdi
callq 0x74120
movb %al, 0x24(%rsp)
jmp 0xe30a2
movb 0x24(%rsp), %al
testb $0x1, %al
jne 0xe30ac
jmp 0xe30c8
leaq 0x1d0(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x71240
jmp 0xe30c3
jmp 0xe3362
leaq 0x36039(%rip), %rsi     # 0x119108
leaq 0x108(%rsp), %rdi
callq 0x74120
movb %al, 0x23(%rsp)
jmp 0xe30e2
movb 0x23(%rsp), %al
testb $0x1, %al
jne 0xe30ec
jmp 0xe3108
leaq 0x1f0(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x71240
jmp 0xe3103
jmp 0xe3360
leaq 0x36019(%rip), %rsi     # 0x119128
leaq 0x108(%rsp), %rdi
callq 0x74120
movb %al, 0x22(%rsp)
jmp 0xe3122
movb 0x22(%rsp), %al
testb $0x1, %al
jne 0xe312c
jmp 0xe3148
leaq 0x210(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x71240
jmp 0xe3143
jmp 0xe335e
leaq 0x35ff9(%rip), %rsi     # 0x119148
leaq 0x108(%rsp), %rdi
callq 0x74120
movb %al, 0x21(%rsp)
jmp 0xe3162
movb 0x21(%rsp), %al
testb $0x1, %al
jne 0xe316c
jmp 0xe3188
leaq 0x230(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x71240
jmp 0xe3183
jmp 0xe335c
leaq 0x35fd9(%rip), %rsi     # 0x119168
leaq 0x108(%rsp), %rdi
callq 0x74120
movb %al, 0x20(%rsp)
jmp 0xe31a2
movb 0x20(%rsp), %al
testb $0x1, %al
jne 0xe31ac
jmp 0xe31c8
leaq 0x250(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x71240
jmp 0xe31c3
jmp 0xe335a
leaq 0x35fb9(%rip), %rsi     # 0x119188
leaq 0x108(%rsp), %rdi
callq 0x74120
movb %al, 0x1f(%rsp)
jmp 0xe31e2
movb 0x1f(%rsp), %al
testb $0x1, %al
jne 0xe31ec
jmp 0xe3208
leaq 0x270(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x71240
jmp 0xe3203
jmp 0xe3358
leaq 0x35f99(%rip), %rsi     # 0x1191a8
leaq 0x108(%rsp), %rdi
callq 0x74120
movb %al, 0x1e(%rsp)
jmp 0xe3222
movb 0x1e(%rsp), %al
testb $0x1, %al
jne 0xe322c
jmp 0xe3248
leaq 0x290(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x71240
jmp 0xe3243
jmp 0xe3356
leaq 0x35f79(%rip), %rsi     # 0x1191c8
leaq 0x108(%rsp), %rdi
callq 0x74120
movb %al, 0x1d(%rsp)
jmp 0xe3262
movb 0x1d(%rsp), %al
testb $0x1, %al
jne 0xe326c
jmp 0xe3288
leaq 0x2b0(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x71240
jmp 0xe3283
jmp 0xe3354
leaq 0x35f59(%rip), %rsi     # 0x1191e8
leaq 0x108(%rsp), %rdi
callq 0x74120
movb %al, 0x1c(%rsp)
jmp 0xe32a2
movb 0x1c(%rsp), %al
testb $0x1, %al
jne 0xe32ac
jmp 0xe32c8
leaq 0x2d0(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x71240
jmp 0xe32c3
jmp 0xe3352
leaq 0xa8(%rsp), %rdi
callq 0x7a640
jmp 0xe32d7
leaq 0xa8(%rsp), %rdi
leaq 0x108(%rsp), %rsi
callq 0x71240
jmp 0xe32ee
leaq 0xc8(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x71240
jmp 0xe3305
leaq 0x2f0(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x743e0
jmp 0xe331c
leaq 0xa8(%rsp), %rdi
callq 0x75d70
jmp 0xe332b
jmp 0xe3352
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x150(%rsp)
movl %eax, 0x14c(%rsp)
leaq 0xa8(%rsp), %rdi
callq 0x75d70
jmp 0xe3350
jmp 0xe339c
jmp 0xe3354
jmp 0xe3356
jmp 0xe3358
jmp 0xe335a
jmp 0xe335c
jmp 0xe335e
jmp 0xe3360
jmp 0xe3362
jmp 0xe3364
jmp 0xe3366
jmp 0xe3368
leaq 0xe8(%rsp), %rdi
callq 0x7cce8
jmp 0xe3377
leaq 0x108(%rsp), %rdi
callq 0x7cce8
jmp 0xe3386
jmp 0xe3388
leaq 0x140(%rsp), %rdi
callq 0x75880
jmp 0xe3397
jmp 0xe2ed4
leaq 0xe8(%rsp), %rdi
callq 0x7cce8
jmp 0xe33ab
jmp 0xe33ad
leaq 0x108(%rsp), %rdi
callq 0x7cce8
jmp 0xe33bc
jmp 0xe3550
leaq 0x170(%rsp), %rdi
callq 0x78200
movb %al, 0x1b(%rsp)
jmp 0xe33d4
movb 0x1b(%rsp), %al
testb $0x1, %al
jne 0xe350e
jmp 0xe33e2
movb $0x1, 0x5e(%rsp)
movl $0x28, %edi
callq 0x737c0
movq %rax, 0x8(%rsp)
leaq 0x87(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x7b5f0
movq 0x10(%rsp), %rdx
leaq 0x9282(%rip), %rsi      # 0xec696
leaq 0x88(%rsp), %rdi
callq 0x78e70
jmp 0xe3423
leaq 0x5f(%rsp), %rdi
movq %rdi, (%rsp)
callq 0x7b5f0
movq (%rsp), %rdx
leaq 0x9277(%rip), %rsi      # 0xec6b3
leaq 0x60(%rsp), %rdi
callq 0x78e70
jmp 0xe3448
movq 0x8(%rsp), %rdi
leaq 0x88(%rsp), %rsi
leaq 0x60(%rsp), %rdx
callq 0x79cd0
jmp 0xe3461
movq 0x8(%rsp), %rdi
movb $0x0, 0x5e(%rsp)
movq 0x2ea9e(%rip), %rsi     # 0x111f10
movq 0x2eae7(%rip), %rdx     # 0x111f60
callq 0x7b010
jmp 0xe3587
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x150(%rsp)
movl %eax, 0x14c(%rsp)
jmp 0xe34ec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x150(%rsp)
movl %eax, 0x14c(%rsp)
jmp 0xe34d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x150(%rsp)
movl %eax, 0x14c(%rsp)
leaq 0x60(%rsp), %rdi
callq 0x7cce8
jmp 0xe34cf
jmp 0xe34d1
leaq 0x5f(%rsp), %rdi
callq 0x76f80
leaq 0x88(%rsp), %rdi
callq 0x7cce8
jmp 0xe34ea
jmp 0xe34ec
leaq 0x87(%rsp), %rdi
callq 0x76f80
testb $0x1, 0x5e(%rsp)
jne 0xe3502
jmp 0xe350c
movq 0x8(%rsp), %rdi
callq 0x74e00
jmp 0xe3550
movq 0x50(%rsp), %rax
movq (%rax), %rdi
addq $0xc0, %rdi
leaq 0x170(%rsp), %rsi
callq 0x79d30
jmp 0xe352c
leaq 0x158(%rsp), %rdi
callq 0x74e60
jmp 0xe353b
leaq 0x170(%rsp), %rdi
callq 0x7ba40
addq $0x318, %rsp            # imm = 0x318
retq
leaq 0x158(%rsp), %rdi
callq 0x74e60
jmp 0xe355f
jmp 0xe3561
leaq 0x170(%rsp), %rdi
callq 0x7ba40
jmp 0xe3570
jmp 0xe3572
movq 0x150(%rsp), %rdi
callq 0x7b550
movq %rax, %rdi
callq 0x88ef0
nopw (%rax,%rax)